package edu.fatec.view;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;

import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import edu.fatec.dbimpl.ProdutoDB;
import edu.fatec.produto.Categoria;
import edu.fatec.produto.Produto;

public class ProdutoView extends JFrame implements ActionListener {

	private JTextField txtId = new JTextField(50);
	private JTextField txtNome = new JTextField(50);
	private JTextField txtDescricao = new JTextField(50);
	private JTextField txtFoto = new JTextField(50);
	private JTextField txtPreco = new JTextField(50);
	private JTextField txtUnidMedida = new JTextField(50);
	private JTextField txtMedida = new JTextField(50);
	private JTextField txtCategoria = new JTextField(50);
	private JTextField txtCidade = new JTextField(50);
	private JTextField txtEstado = new JTextField(50);
	private JTextField txtPaisOrigem = new JTextField(50);
	private JPanel panFoto;


	public ProdutoView() { 
		JPanel panPrincipal = new JPanel();
		JPanel panEdicao = new JPanel();
		JPanel panBotoes = new JPanel();

		panPrincipal.setLayout( new BorderLayout() );
		panEdicao.setLayout( new GridLayout(12, 2) );
		setContentPane( panPrincipal );
		panPrincipal.add(panEdicao, BorderLayout.CENTER);
		panPrincipal.add(panBotoes, BorderLayout.SOUTH);

		JButton btnInserir = new JButton("Inserir");
		JButton btnPesquisar = new JButton("Pesquisar");

		btnInserir.addActionListener(this);
		btnPesquisar.addActionListener(this);

		panBotoes.add(btnInserir);
		panBotoes.add(btnPesquisar);

		panEdicao.add( new JLabel("Id : ") ); panEdicao.add( txtId );
		panEdicao.add( new JLabel("Nome : ") ); panEdicao.add( txtNome );
		panEdicao.add( new JLabel("Descricao : ") ); panEdicao.add( txtDescricao );
		panEdicao.add( new JLabel("Foto : ") ); panEdicao.add( txtFoto );
		panEdicao.add( new JLabel("Preco : ") ); panEdicao.add( txtPreco );
		panEdicao.add( new JLabel("Unidade Medida : ") ); panEdicao.add( txtUnidMedida );
		panEdicao.add( new JLabel("Medida : ") ); panEdicao.add( txtMedida );
		panEdicao.add( new JLabel("Categoria : ") ); panEdicao.add( txtCategoria );
		panEdicao.add( new JLabel("Cidade : ") ); panEdicao.add( txtCidade );
		panEdicao.add( new JLabel("Estado : ") ); panEdicao.add( txtEstado );
		panEdicao.add( new JLabel("Pais de Origem : ") ); panEdicao.add( txtPaisOrigem );
		panFoto = new JPanel();
		panEdicao.add( new JLabel("Foto : ") ); panEdicao.add( panFoto );

		
		//panPrincipal.add(panFoto, BorderLayout.EAST);
		
		setSize(600, 400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}


	@Override
	public void actionPerformed(ActionEvent act) {
		String cmd = act.getActionCommand();
		ProdutoDB prodDb = new ProdutoDB();
		if ("INSERIR".equalsIgnoreCase(cmd)) {
			try {
				Produto p = new Produto();
				p.setId(Long.parseLong(txtId.getText()));
				p.setNome(txtNome.getText());
				p.setDescricao(txtDescricao.getText());
				BufferedImage buf = null;

				buf = ImageIO.read(new File(txtFoto.getText()));

				p.setFoto(buf);
				p.setPreco(Float.parseFloat(txtPreco.getText()));
				p.setUnidMedida(txtUnidMedida.getText());
				p.setMedida(Float.parseFloat(txtMedida.getText()));

				Categoria cat = new Categoria();
				cat.setId(Long.parseLong(txtCategoria.getText()));
				p.setCategoria(cat);
				p.setCidade(txtCidade.getText());
				p.setEstado(txtEstado.getText());
				p.setPaisOrigem(txtPaisOrigem.getText());
				prodDb.inserir(p);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				JOptionPane.showMessageDialog(null, "Erro ao adicionar a foto");
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				JOptionPane.showMessageDialog(null, "Erro ao acessar o banco de dados");
				e.printStackTrace();
			} catch (SQLException e) {
				JOptionPane.showMessageDialog(null, "Erro ao inserir o produto na tabela do banco de dados");
				e.printStackTrace();
			}
		} else if ("PESQUISAR".equalsIgnoreCase(cmd)) {
			try {
				Produto p = prodDb.pesquisar(Long.parseLong(txtId.getText()));
				txtId.setText( String.valueOf(p.getId()) );
				txtNome.setText( p.getNome() );
				txtDescricao.setText( p.getDescricao() );
				panFoto.imageUpdate(p.getFoto(), 0, 0, 0, p.getFoto().getWidth(), p.getFoto().getHeight());
				panFoto.repaint();
				txtPreco.setText( String.valueOf(p.getPreco()) );
				txtUnidMedida.setText( p.getUnidMedida() );
				txtMedida.setText(String.valueOf(p.getMedida()));
				txtCategoria.setText(String.valueOf(p.getCategoria().getId()));
				txtCidade.setText(p.getCidade());
				txtEstado.setText(p.getEstado());
				txtPaisOrigem.setText(p.getPaisOrigem());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				JOptionPane.showMessageDialog(null, "Erro ao adicionar a foto");
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				JOptionPane.showMessageDialog(null, "Erro ao acessar o banco de dados");
				e.printStackTrace();
			} catch (SQLException e) {
				JOptionPane.showMessageDialog(null, "Erro ao pesquisar o produto na tabela do banco de dados");
				e.printStackTrace();
			}
		}


	}

	public static void main(String args[]) {
		ProdutoView pv = new ProdutoView();
	}

}
